home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / PROLOG / BP330 / !BinPro330 / progs / lknight < prev    next >
Text File  |  1994-09-10  |  972b  |  57 lines

  1. p:-[lknight].
  2.  
  3. go:-go(5).
  4.  
  5. go(N):-
  6.     time(_),make_board(N,Board,NbMoves),
  7.     knight(NbMoves,1,1,Board),!,
  8.     time(T),
  9.     write(time=T),nl,statistics,show(N,Board).
  10.  
  11. make_board(N,Board,M):-
  12.     length(L,N),
  13.     findall(L,nth_member(_,L,_),Board),
  14.     M is N*N.
  15.  
  16. val(I,J,V,Board):-nth_member(L,Board,I),nth_member(V,L,J),!.
  17.  
  18. knight(0,_,_,_) :- !.
  19. knight(K,A,B,Board) :-
  20.         K1 is K-1,
  21.         val(A,B,K,Board),
  22.     move(Dx,Dy),
  23.         step(K1,A,B,Dx,Dy,Board).
  24.  
  25. step(K1,A,B,Dx,Dy,Board):-
  26.     C is A + Dx,
  27.     D is B + Dy,
  28.     knight(K1,C,D,Board).
  29.  
  30. show(N,Board):-
  31.             nth_member(L,Board,_I),nth_member(V,L,J),
  32.             write(' '),X is 1-V // 10, tab(X),write(V),
  33.             (J=N->nl;true),
  34.     fail.
  35. show(_):-nl.
  36.  
  37. move( 2, 1).
  38. move( 2,-1).
  39. move(-2, 1).
  40. move(-2,-1).
  41. move( 1, 2).
  42. move(-1, 2).
  43. move( 1,-2).
  44. move(-1,-2).
  45.  
  46. /* % now already in BinProlog
  47. nth_member(X,Xs,N):-member_i(X,Xs,1,N).
  48.  
  49. member_i(X,[X|_],N,N).
  50. member_i(X,[_|Xs],N1,N3):-
  51.     N2 is N1+1,
  52.     member_i(X,Xs,N2,N3).
  53. */
  54.  
  55. time(T) :- statistics(runtime,[_,T]).
  56.  
  57.